<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>用构造函数创建对象</title>
    <script>
        // 为什么需要构造函数
        // 因为其他两种方法一次只能创建一个对象
        // 创建对象，有很多代码都是重复的，所以把这个函数称为  构造函数
        // 构造函数  把对象里面相同的属性和方法抽象出来后封装到函数里面
        // function 构造函数名（）{
        //     this.属性 = 值;
        //     this.方法 = function(){}
        // }


        // new关键字执行过程
        // 1.new 构造函数名() 就可以再内存中创建一个空的对象;
        // 2.this 就会只向刚刚创建的空对象
        // 3.执行构造函数里面的代码 给这个空对象添加属性和方法
        // 4.返回这个对象
        function Star(uname,age,sex) {
            this.name = uname;
            this.age = age;
            this.sex = sex;
            this.sing = function(sang) {
                console.log(sang);
            }
        }
        var ldh = new Star('刘德华',18,'男');
        console.log(typeof ldh);//调用函数返回的是一个对象
        console.log(ldh.name);
        console.log(ldh['sex']);
        ldh.sing('冰雨')

        var zxy = new Star('张学友',19,'男');
        console.log(zxy.name);
        console.log(zxy.age);
        zxy.sing('李香兰')

        // 1.构造函数名字首字母要大写
        // 2.我们构造函数并不需要return 就可以返回结果
        // 3.调用函数  必须使用 new
        // 4.只要new Star() 调用函数就可以创建一个对象  ldh  {}
        // 5.我们的属性和方法前面必须添加 this
    </script>
</head>
<body>
    
</body>
</html>